//
//  MainViewController.swift
//  weibo
//
//  Created by warm on 17/6/17.
//  Copyright © 2017年 hp. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    /*override func viewDidLoad() {
        
        
        super.viewDidLoad()
        
        
      
 /*
 
 
       /* addChildViewController(HomeViewController(), title: "首页", imageName:"tabbar_home")
        
         addChildViewController(HomeViewController(), title: "消息", imageName: "tabbar_message_center")
         addChildViewController(HomeViewController(), title: "发现", imageName: "tabbar_discover")
         addChildViewController(HomeViewController(), title: "我", imageName: "tabbar_profile")
 */
        
        
        /*
        addChildViewController("HomeViewController", title: "首页", imageName:"tabbar_home")
        
        addChildViewController("MessageViewController", title: "消息", imageName: "tabbar_message_center")
        addChildViewController("DiscoverViewController", title: "发现", imageName: "tabbar_discover")
        addChildViewController("ProfileViewController", title: "我", imageName: "tabbar_profile")
*/

        
        //下面利用JSON来加载数据
        
        
        //1获取JSON的路径
         guard let jsonPath=NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)else{
        
        
        print("没有获得对应的文件路径")
            return
        
        
        }
        
        //2读取json文件中的内容
         guard  let jsonData=NSData(contentsOfFile: jsonPath)else
         {
        
        
        print("没有获取json文件中的数据")
            return
        
        
        }
        //3将data 转成数组
        
        //如果调用系统的某个方法的时候，该方法在最后会有一个throws，说明该方法会抛出一个异常
        //那么就要对该异常进行处理
        /*
         
         在swift中提供三种处理异常的方式
         
         方式一：
         
         try方式 需要手动处理异常
         
         do{
         try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)
         
         }
         catch {
         //错误的异常信息
         print(error)
         }
         
         
         
         方式二：（常用的方式）
         try?方式，系统制动处理，如果有异常，则该方法会返回nil,没有的话就返回该对象
         
         需要校验
         
         
         guard let anyObject=try?NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)else
         {
         
         return
         
         
         }
        方式三：
         try! 方式，直接告诉系统改方法没有异常，但是如果该方法出现了异常那么程序就会出错
         一般不用
         
         nyObject=try！NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers）
         
         
         */
     
        
        
        guard let anyObject=try?NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)else
        {
        
        return
        
        
        }
       guard let dictArray=anyObject as?[[String:AnyObject]]else
        {
        
          return
        
        }
        
        //4遍历字典，获取响应的信息
        for dict in dictArray
        {
        
        
            ///4.1获取控制器对应的字符串
            guard let vcName=dict["vcName"]as? String else
            {
            
            
            continue
            
            
            }
            
            
            
            ///4.2获取控制器对应的字符串
            guard let title=dict["title"]as? String else
            {
                
                
                continue
                
                
            }
            
            
            ///4.3获取控制器对应的字符串
            guard let imageName=dict["imageName"]as? String else
            {
                
                
                continue
                
                
            }
            //4.4添加子控制器
            addChildViewController(vcName, title: title, imageName: imageName)
        
        
        }
        
        
        
        
        
        
    }

    //swift支持方法的重载，方法名相同但是参数不同，-1、参数的类型不同2、参数的个数不同
    //private 在当前文件可以访问，但是在其他文件不可以访问
    
    private func addChildViewController(childVcName: String,title:String,imageName:String) {
        
        //1、创建子控制器
        
       // let childVc=HomeViewController()
        
        
      /*
        //2、设置自控制器的属性
        childVc.title=title
        
        childVc.tabBarItem.image=UIImage(named: imageName)
        
        childVc.tabBarItem.selectedImage=UIImage(named: imageName+"highlighted")
        
        //3、包装导航栏的控制器
        let childNav=UINavigationController(rootViewController: childVc)
        //4、添加控制器
        addChildViewController(childNav)
 
 
    */
        //1、获得命名空间(as？ String将nameSpace转换成字符串类型的可选类型)
        guard let nameSpace=NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"]as? String else
        {
        
        
           print("没有获得命名空间")
            return
        
        
        
        }
        //2根据字符串获得对应的Class
        
        guard let childVcClass=NSClassFromString(nameSpace+"."+childVcName) else
        {
        
        print("没有获得字符串对应的Class")
            return
        
        }
        
       //3 将对应的AnyObject转换成控制器的类型
        guard let childVcType=childVcClass as? UIViewController.Type else
        {
        
            print("没有获得对应的控制器的类型")
        return
        
        }
        //4 创建对应的控制器的对象
        
        let childVc=childVcType.init()
        
        //5、设置自控制器的属性
        childVc.title=title
        
        childVc.tabBarItem.image=UIImage(named: imageName)
        
        childVc.tabBarItem.selectedImage=UIImage(named: imageName+"highlighted")
        
        //6、包装导航栏的控制器
        let childNav=UINavigationController(rootViewController: childVc)
        //7、添加控制器
      addChildViewController(childNav)
        

        
 
 
 
 
 
     */
 
        
        
       }*/
    
    
    
    
    //实现一个懒加载存放图片的名称
    private  lazy var imageNames=["tabbar_home","tabbar_message_center","","tabbar_discover","tabbar_profile"]
    
    
    
    
    
    
    //设置一个图片按钮
  //  private lazy var composeBtn:UIButton=UIButton()
    
   // private lazy var composeBtn:UIButton=UIButton.createButton("tabbar_compose_icon_add", bgImageName: "tabbar_compose_button")

    
    private lazy var composeBtn:UIButton=UIButton(imageName: "tabbar_compose_icon_add", bgImageName: "tabbar_compose_button")

       override func viewDidLoad()
        {
        super.viewDidLoad()
        
           setupComposeBtn()
            
            
        
        }
    //调整应用程序的时候都是在下面的函数中调整的，要不然，如果在ViewDidLoad中进行设置，那么会在

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        
       // setUpTabbarItems()

        
        
      
    }
    
        
        

    }
    
    
    
    



//MARK:-设置UI界面


extension MainViewController
{
    
    
    private func setupComposeBtn()
    {
        
        
        
        
        tabBar.addSubview(composeBtn)
        //设置一个中间的加号按钮
        
        composeBtn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        composeBtn.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        
        
        composeBtn.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        
        
        composeBtn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        
        
        composeBtn.sizeToFit()
        
        composeBtn.center=CGPointMake(tabBar.center.x, tabBar.bounds.size.height*0.5)
        

        
        

        
        
        
        
    }
    
    //调整tabbar中的Item
    
    private func setUpTabbarItems()
    {
    
    
    
        
        
        //1 遍历所有的item
        
        for  i in 0..<tabBar.items!.count
        {
            //2 获取item
            let item=tabBar.items![i]
            //3 如果下标是为2的话，则该item不可以与用户进行交互
            if i==2 {
                item.enabled=false;
                continue
            }
            
            //4设置其他的Item的选中的时候的状态的图片
            item.selectedImage=UIImage(named:imageNames[i]+"_highlighted")
            
            
            

    
    }
    
    
    
    
}

}























